在前一篇文章介紹給大家如何在 go 語言內寫方法,有了方法就可以把相同的邏輯抽成共用的方法,讓同一件事情可以重複呼叫共同的方法來處理,但是如果要更進一步的說道程式設計不能不提到物件導向,前面也有大致上說明 go 的物件導向,所以這一篇要開始跟大家說明 go 的介面。
本文同步放置於此
在介紹怎麼在 go 語言使用介面之前當然要跟大家說明一下甚麼是介面,所謂的介面interface
就是定義一個動作,但是不去管該動作裡面如何實作。所以舉一個常常在物件導向中會用到的例子,動物這個類別有一個介面叫做走路,而狗繼承動物這類別,所以狗也要實作走路這個介面,而他實作的方式是用四隻腳走路。另外一方面人也是繼承動物這類別,所以也要實作走路這個介面,而他實作的方式就是兩隻腳走路,所以我們就用這例子來看看在 go 怎麼使用。
就如同上面的例子,接下來我們要開始說明如何宣告介面,這邊請大家先看一下下列例子
type Animal interface {
Walk()
}
這邊說明一下,這就是宣告 go 的介面的方法,這裡需告說Animal
這個介面有一個方法需要實作,而這個方法就是Walk
,接下來說明一下如何實作介面。
在前一個段落告訴大家如何宣告一個介面,接下來我們要告訴大家如何實作用兩隻腳走路或用四隻腳走路,請大家先看一下以下的例子
type Dog int
func (d Dog) Walk() {
fmt.Println("Walk with four feets")
}
type Human int
func (h Human) Walk() {
fmt.Println("Walk with two feets")
}
上面例子先簡單寫一下,這裡有一個類別是狗,他去實作一個走的介面,還有另外一個類別是人類也去實作一個走的介面,這裡簡單寫一下就是印出兩隻腳走路或是四隻腳走路。寫到這邊還沒有說明要如何使用這介面,這就在下一個段落跟大家說明。
前兩個例子分別告訴大家如何宣告一個介面,也告訴大家如何實作兩個類別的介面,接下來重頭戲就是要跟大家說如何使用這介面了,大家請看一下下列例子
package main
import "fmt"
type Animal interface {
Walk()
}
func main() {
var a Animal
d := Dog(1)
h := Human(1)
a = d // a Dog implements Animal
a.Walk()
a = h // a Human implements Animal
a.Walk()
}
type Dog int
func (d Dog) Walk() {
fmt.Println("Walk with four feet")
}
type Human int
func (h Human) Walk() {
fmt.Println("Walk with two feet")
}
上面是一個完整的例子,首先宣告一個動物的走的介面,然後實作人類的走路跟狗的走路,最後是宣告一個動物的變數,然後宣告一個狗的變數跟人類的變數,最後分別呼叫身為狗的走路這個介面跟身為人類的走路介面,結果可以看到印出來用四隻腳走路跟用兩隻腳走路的文字。
上面說明了如何在 go 語言中宣告並實作介面,但是上面的例子有很多讀者可能滿腦子一問這是甚麼東西,這些例如type
這個類別的關鍵字下一篇內容會為大家更進一步介紹。